package com.hejia.alauda.service;

import com.hejia.alauda.entity.*;
import com.hejia.alauda.entity.example.AppVersionExample;
import com.hejia.alauda.entity.example.ParameterExample;
import com.hejia.alauda.entity.example.WarningExample;
import com.hejia.alauda.utils.Pager;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * Created by Johnny(johnny@hejiajinrong.com) on 15/3/3.
 */
public interface ConfigureService {

    /**
     * 增加app版本信息
     *
     * @param user
     * @return
     */
    boolean addAppVersion(AppVersion version);

    /**
     * 修改app版本信息
     *
     * @param user
     * @return
     */
    boolean modifyAppVersion(AppVersion version);

    /**
     * 查找所有app版本信息
     *
     * @param pager
     * @return
     */

    public Pager<AppVersion> findAllAppVersion(Pager<AppVersion> pager);

    /**
     * 查找所有app版本信息
     *
     * @param pager
     * @return
     */
    public Pager<AppVersion> findAllAppVersion(Pager<AppVersion> pager,
                                               AppVersionExample example);

    /**
     * 获取最新版本信息
     *
     * @param type
     * @return
     */
    public AppVersion findLastestAppVersion(String type);

    /**
     * 保存版本信息
     *
     * @param type
     * @return
     */
    public boolean saveAppVersion(AppVersion appVersion);

    /**
     * 根据ID获取版本信息
     *
     * @param type
     * @return
     */
    public AppVersion getAppVersionById(Long id);

    /**
     * 根据ID删除版本信息
     *
     * @param type
     * @return
     */
    public boolean deleteAppVersion(Long id);


    /**
     * 获取系统参数
     *
     * @param category
     * @return
     */
    public Parameter getParameter(Parameter.Category category);

    /**
     * 根据ID获取系统参数
     *
     * @param
     * @return
     */
    public Parameter getParameterById(Long id);


    /**
     * 获取系统参数列表
     *
     * @param category
     * @return
     */

    public List<Parameter> getParameters(Parameter.Category category);


    /**
     * 获取系统参数
     *
     * @param category
     * @return
     */

    public Parameter getParameter(Parameter.Category category,String code);
    /**
     * 更新系统参数
     * @param param
     * @return
     */
    public boolean updateParameter(Parameter param);

    /**
     * 保存系统参数
     * @param param
     * @return
     */
    public boolean saveParameter(Parameter param);

    /**
     * 删除系统参数
     * @param param
     * @return
     */
    public boolean deleteParameter(Long id);


    /**
     * 转换为启动画面
     * @param parameter 参数
     * @return
     */
    SplashScreen toSplashScreen(Parameter parameter);

    /**
     * 查找启动画面
     * 有DPI按DPI查找，否则按分辨率查找
     * @param os		操作系统
     * @param width		宽分辨率
     * @param height	高分辨率
     * @param dpi		DPI
     * @return			启动画面
     */
    SplashScreen findSplashScreen(
            String os,
            Integer width,
            Integer height,
            Integer dpi);

    /**
     * 设置启动画面
     * @param splashScreen
     * @throws Exception
     */
    SplashScreen setSplashScreen(SplashScreen splashScreen) throws Exception;

    /**
     * 设置显示时间
     * @param os
     * @param startTime
     * @param endTime
     * @throws Exception
     */
    void setDisplayTime(String os, Date startTime, Date endTime) throws Exception;

    /**
     * 查找所有启动画面
     * @return
     */
    List<SplashScreen> findAllSplashScreens();

    /**
     * 查找所有预警
     *
     * @param pager
     * @return
     */

    public Pager<Warning> findWarning(Pager<Warning> pager);

    /**
     * 查找所有预警
     *
     * @param pager
     * @return
     */
    public Pager<Warning> findWarning(Pager<Warning> pager,
                                      WarningExample example);

    /**
     * 根据ID删除预警
     *
     * @param type
     * @return
     */
    public boolean deleteWarning(Long id);

    /**
     * 保存预警
     *
     * @param type
     * @return
     */
    public boolean saveWarning(Warning warning);

    /**
     * 参数设置保存
     *
     * @param json
     * @return
     */
    public boolean saveParam(WarningSetting ws) throws Exception;

    /**
     * 获取预警设置
     * @return
     */
    public WarningSetting getWarningSetting();

    /***
     * 检查失败订单
     */
    public void checkFailOrders();

    /**
     * 检查失败订单银行
     */
    public void checkFailOrderBanks();
    
    /**
     * 分页按条件查询参数配置表
     * @param example
     * @param pager
     * @return
     */
    Pager<Parameter> findParametersByPager(ParameterExample example, Pager<Parameter> pager);
    
    /**
     * 根据KEY获得活动的配置
     * @param key
     * @return
     */
    Map<String,Object> getActivityConfig(String key);
}
